package com.fbty.mt.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;

public class ImgCode {

	public static ByteArrayInputStream drawImg(String codes) throws Exception{

		int width = 95;
		// 验证码图片的高度。
		int height = 25;
		BufferedImage buffImg = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		Graphics2D g = buffImg.createGraphics();

		// 创建一个随机数生成器类。
		Random random = new Random();

		// 设定图像背景色(因为是做背景，所以偏淡)
		g.setColor(getRandColor(200, 250));
		g.fillRect(0, 0, width, height);
		// 创建字体，字体的大小应该根据图片的高度来定。
		Font font = new Font("黑体", Font.HANGING_BASELINE, 24);
		// 设置字体。
		g.setFont(font);

		// 画边框。
		g.setColor(Color.BLACK);
		g.drawRect(0, 0, width - 1, height - 1);
		// 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到。
		for (int i = 0; i < 155; i++) {
			g.setColor(getRandColor(160, 200));
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int xl = random.nextInt(12);
			int yl = random.nextInt(12);
			g.drawLine(x, y, x + xl, y + yl);
		}
		char[] cs = codes.toCharArray();
		for(int i=0;i<cs.length;i++){
			// 用随机产生的颜色将验证码绘制到图像中。
			// 生成随机颜色(因为是做前景，所以偏深)
			// g.setColor(getRandColor(1, 100));
			// 调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成
			g.setColor(new Color(20 + random.nextInt(110), 20 + random
					.nextInt(110), 20 + random.nextInt(110)));

			g.drawString(String.valueOf(cs[i]), 18 * i + 3, 20);
		}
		// 图象生效
		g.dispose();
        ByteArrayOutputStream output = new ByteArrayOutputStream();  
            ImageOutputStream imageOut = ImageIO  
                    .createImageOutputStream(output);  
            ImageIO.write(buffImg, "JPEG", imageOut);  
            imageOut.close();  
        ByteArrayInputStream image = new ByteArrayInputStream(output.toByteArray());  
        output.close();
        return image;
	}

	private static Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色
		Random random = new Random();
		if (fc > 255)
			fc = 255;
		if (bc > 255)
			bc = 255;
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}
	
	public static  String getCode(){
		Random random = new Random();
		// 设置默认生成4个验证码
		int length = 5;
		// 设置备选验证码:包括"a-z"和数字"0-9"
		char[] codeSequence={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
				'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 
				'X', 'Y', 'Z'}; 
		StringBuffer randomCode=new StringBuffer(); 
		// 随机产生4位数字的验证码。
		for (int i = 0; i < length; i++) {
			String strRand=String.valueOf(codeSequence[random.nextInt(26)]); 
			//将产生的四个随机数组合在一起。 
			randomCode.append(strRand);
		}
//		randomCode.append("1");
		return randomCode.toString();
	}
	
	public static void main(String[] args) {
	}
}
